home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 August / August CD.bin / Shareware / Education / numericalmethods Folder / chap_3 / lufact.m < prev    next >
Encoding:
Text File  |  1994-06-05  |  771 b   |  29 lines  |  [MATF/MATL]

  1. function  [LU,row,det1] = lufact(A)
  2. % [LU,row,det1] = lufact(A)
  3. % A is an nxn matrix, input.
  4. % LU is an nxn matrix, output.
  5. % row is the row permutation information, output.
  6. % det1 is the determinant of A, output.
  7. % Partial pivoting is used.
  8. [n n] = size(A);
  9. det1 = 1;
  10. row = 1:n;                              % Initialize pointer vector.
  11. for p = 1:n-1,
  12.   [max1 prow] = max(abs(A(p:n,p)));     % Find the pivot row.
  13.   if p < prow+p-1,
  14.     temp = row(p); 
  15.     row(p) = row(prow+p-1);
  16.     row(prow+p-1) = temp; 
  17.     det1 = - det1;
  18.   end
  19.   det1 = det1*A(row(p),p);
  20.   if  det1 == 0, break, end
  21.   for k = p+1:n,
  22.     mult = A(row(k),p)/A(row(p),p);
  23.     A(row(k),p) = mult;
  24.     A(row(k),p+1:n) = A(row(k),p+1:n) - mult*A(row(p),p+1:n);
  25.   end
  26. end
  27. det1 = det1*A(row(n),n);
  28. LU = A;
  29.